//Clase para recibir datos del puerto serial
package logica;

import java.io.*;
import java.util.*;
import javax.comm.*;

public class RecibeDato implements Runnable, SerialPortEventListener {

    CommPortIdentifier idPuerto;
    InputStream entrada;
    SerialPort puertoSerie;
    Thread tLectura;
    ProcesaCadena rd;

    @SuppressWarnings("LeakingThisInConstructor")
    public RecibeDato(CommPortIdentifier x, ProcesaCadena y) {
        this.idPuerto = x;
        this.rd = y;
        System.out.println(rd.caracteres_validos);
        // Si el puerto no está en uso, se intenta abrir
        try {
            puertoSerie = (SerialPort) idPuerto.open("AplLectura", 2000);
        } catch (PortInUseException e) {
        }
        // Se obtiene un canal de entrada
        try {
            entrada = puertoSerie.getInputStream();
        } catch (IOException e) {
        }
        // Añadimos un receptor de eventos para estar informados de lo que suceda en el puerto
        try {
            puertoSerie.addEventListener(this);
        } catch (TooManyListenersException e) {
        }
        // Hacemos que se nos notifique cuando haya datos disponibles en el buffer de la puerta
        puertoSerie.notifyOnDataAvailable(true);
        // Se fijan los parámetros de comunicación del puerto
        try {
            puertoSerie.setSerialPortParams(9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
        } catch (UnsupportedCommOperationException e) {
        }
        // Se crea y lanza el thread que se va a encargar de quedarse esperando en la puerta a que haya datos disponibles
        tLectura = new Thread(this);
        //tLectura.start();
       
    }

    public void run() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
        }
    }

    public void serialEvent(SerialPortEvent ev) {
        switch (ev.getEventType()) {

            case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
                break;
            // Cuando haya datos disponibles se leen
            case SerialPortEvent.DATA_AVAILABLE:
                try {
                    while (entrada.available() > 0) {
                        char caracter = (char) entrada.read();
                        System.out.print(caracter);
                        rd.recibeLectura("" + caracter);
                    }
                } catch (IOException e) {
                }
                break;
        }
    }
}